#!/usr/bin/env python3
#coding:utf-8

__author__ = 'xmxoxo'

'''
这段代码读入一个文件，文件里边每一行都是一个人的名字。
需要写段代码，统计一下这些人的名字中一共出现了多少个不同的姓氏，这些姓氏分别对应多少人，
按照出现次数从高到低排列。
例如输入文件(names.txt)是：
张三
李四
张飞
张三丰
李元霸
欧阳锋
输出：
“张”姓出现3次
“李”姓出现2次
“欧阳”姓出现1次

'''

# 读入文件
def readtxtfile(fname):
    pass
    with open(fname,'r',encoding='utf-8') as f:  
        data=f.read()
    return data

#保存文件
def savetofile(txt,filename):
    pass
    with open(filename,'w',encoding='utf-8') as f:  
        f.write(str(txt))
    return 1

#从姓名中提取姓
#返回一个list
def firstname (fullname):
    pass
    lstRet = []
    for i in range(len(fullname) -1) :
        lstRet.append (fullname[:-(i+1)])
    return lstRet

#判断姓名是否出现在百家姓中，出现一个立即返回
#返回匹配的姓名
def truename (fname,bjx):
    pass
    strRetName = ''
    for x in fname :
        if x in bjx:
            strRetName = x
            break
    return strRetName

##主程序
def main(path):
    pass
    #加载百家姓
    bjx = readtxtfile('./百家姓.txt')
    #读数据文件
    txt = readtxtfile(path)
    #拆分成行
    lstName = txt.split('\n')
    #判断并统计
    dictName = {}
    for x  in lstName :
        fname = firstname(x)
        tname = truename(fname,bjx)
        if tname:
            if tname in dictName.keys():
                dictName[tname] += 1
            else:
                dictName[tname] = 1
    #排序
    lstRet = sorted(dictName.items(),  key = lambda x:x[1],reverse =1)
    #输出结果
    for x in lstRet :
        print('“%s”姓出现 %2d 次' % x)


if __name__ == '__main__':
    pass
    main('./names.txt')



'''
运行结果：

---------- python36 ----------
“张”姓出现  3 次
“李”姓出现  2 次
“欧阳”姓出现  1 次

输出完成 (耗时: 0 秒)

'''